package com.fiap.gestaoPassagens.trecho;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.fiap.gestaoPassagens.assento.AssentoBean;

public class TrechoBean implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private long id;
	private long idVoo;
	private String origemTrecho;
	private String destinoTrecho;
	private Date dataPrevistaDecolagem;
	private Date dataPrevistaPouso;
	private List<AssentoBean> listaAssentos;
	private boolean ativo = true;
	
	public boolean isAtivo() {
		return ativo;
	}

	public void setAtivo(boolean ativo) {
		this.ativo = ativo;
	}

	public boolean isPossuiAssentos(){
		if(this.listaAssentos!=null && this.listaAssentos.size() >0){
			return true;
		}else{
			return false;
		}
	}
	

	public List<AssentoBean> getListaAssentos() {
		return listaAssentos;
	}

	public void setListaAssentos(List<AssentoBean> listaAssentos) {
		this.listaAssentos = listaAssentos;
	}
	
	public void addAssento(AssentoBean assento){
		if(this.listaAssentos==null){
			this.listaAssentos = new ArrayList<AssentoBean>();
		}
		this.listaAssentos.add(assento);
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public long getIdVoo() {
		return idVoo;
	}

	public void setIdVoo(long idVoo) {
		this.idVoo = idVoo;
	}

	public String getOrigemTrecho() {
		return origemTrecho;
	}

	public void setOrigemTrecho(String origemTrecho) {
		this.origemTrecho = origemTrecho;
	}

	public String getDestinoTrecho() {
		return destinoTrecho;
	}

	public void setDestinoTrecho(String destinoTrecho) {
		this.destinoTrecho = destinoTrecho;
	}

	public Date getDataPrevistaDecolagem() {
		return dataPrevistaDecolagem;
	}

	public void setDataPrevistaDecolagem(Date dataPrevistaDecolagem) {
		this.dataPrevistaDecolagem = dataPrevistaDecolagem;
	}

	public Date getDataPrevistaPouso() {
		return dataPrevistaPouso;
	}

	public void setDataPrevistaPouso(Date dataPrevistaPouso) {
		this.dataPrevistaPouso = dataPrevistaPouso;
	}
	
	public long getQtdAssentoClasseEconomicaLivres(){
		long qtd = 0;
		for(AssentoBean a:this.listaAssentos){
			if(a.getClasseAssento()==AssentoBean.CLASSE_ECONOMICA && a.getStatusAssento()==AssentoBean.ASSENTO_LIVRE){
				qtd++;
			}
		}
		return qtd;
	}
	
	public long getQtdAssentoPrimeiraClasseLivres(){
		long qtd = 0;
		for(AssentoBean a:this.listaAssentos){
			if(a.getClasseAssento()==AssentoBean.CLASSE_EXECUTIVA && a.getStatusAssento()==AssentoBean.ASSENTO_LIVRE){
				qtd++;
			}
		}		
		return qtd;
	}	
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime
				* result
				+ ((dataPrevistaDecolagem == null) ? 0 : dataPrevistaDecolagem
						.hashCode());
		result = prime
				* result
				+ ((dataPrevistaPouso == null) ? 0 : dataPrevistaPouso
						.hashCode());
		result = prime * result
				+ ((destinoTrecho == null) ? 0 : destinoTrecho.hashCode());
		result = prime * result + (int) (idVoo ^ (idVoo >>> 32));
		result = prime * result
				+ ((origemTrecho == null) ? 0 : origemTrecho.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		TrechoBean other = (TrechoBean) obj;
		if (dataPrevistaDecolagem == null) {
			if (other.dataPrevistaDecolagem != null)
				return false;
		} else if (!dataPrevistaDecolagem.equals(other.dataPrevistaDecolagem))
			return false;
		if (dataPrevistaPouso == null) {
			if (other.dataPrevistaPouso != null)
				return false;
		} else if (!dataPrevistaPouso.equals(other.dataPrevistaPouso))
			return false;
		if (destinoTrecho == null) {
			if (other.destinoTrecho != null)
				return false;
		} else if (!destinoTrecho.equals(other.destinoTrecho))
			return false;
		if (idVoo != other.idVoo)
			return false;
		if (origemTrecho == null) {
			if (other.origemTrecho != null)
				return false;
		} else if (!origemTrecho.equals(other.origemTrecho))
			return false;
		return true;
	}
	

}
